/**
 * Created by liuhanhui on 2017/9/4.
 */

jQuery.fn.extend({
    formValidate: function () {
        var result = true;
        $(this).find("[data-required='true']").each(function () {
            $(this).on("blur", function () {
                if ($(this).isNull()) {
                    $(this).closest("div").addClass("has-error");
                    $(this).closest("div").removeClass("has-success");
                } else {
                    $(this).closest("div").addClass("has-success");
                    $(this).closest("div").removeClass("has-error");
                }
            });
            if ($(this).isNull()) {
                result = false;
                $(this).closest("div").addClass("has-error");
                $(this).closest("div").removeClass("has-success");
            } else {
                $(this).closest("div").addClass("has-success");
                $(this).closest("div").removeClass("has-error");
            }
        });

        $(this).find("[data-type]").each(function () {
            $(this).on("blur", function () {
                if (!$(this).isMatch()) {
                    $(this).closest("div").addClass("has-error");
                    $(this).closest("div").removeClass("has-success");
                } else {
                    $(this).closest("div").addClass("has-success");
                    $(this).closest("div").removeClass("has-error");
                }
            });
            if (!$(this).isMatch()) {
                result = false;
                $(this).closest("div").addClass("has-error");
                $(this).closest("div").removeClass("has-success");
            } else {
                $(this).closest("div").addClass("has-success");
                $(this).closest("div").removeClass("has-error");
            }
        });
        return result;
    },

    isNull: function () {
        if ($(this).val().length == 0) {
            return true;
        } else {

            return false;
        }
    },

    isMatch: function () {
        var regex = $(this).attr("data-regex");
        if (regex == undefined) {
            var dataType = $(this).attr("data-type");
            switch (dataType) {
                case "phone":
                    regex = "^1[34578]\\d{9}$";
                    break;
                case "number":
                    regex = "^([+-]?)\\d*\\.?\\d+$";
                    break;
                case "email":
                    regex = "\\w+[@]{1}\\w+[.]\\w+";
                    break;
                default:
                    regex = ".*";
                    break;
            }
        }
        var reg = new RegExp(regex, "i");
        if (!reg.test($(this).val())) {
            return false;
        } else {
            return true;
        }
    }

});